﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Collections.Generic;
using System.Net.Mail;
using Microsoft.SharePoint.Utilities;
using System.Collections;
using System.Linq;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

namespace TIT.Presentation.HotSite.TITVMPSimposioInscritos
{
    public partial class TITVMPSimposioInscritosUserControl : UserControl
    {
        SPWeb myWeb = SPContext.Current.Web;
        private int _retrievedItemId;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregarCombo();
                carregarGrupo();
                lblAlertValidacao.Attributes.Add("display", "none");
            }
            this.RadioButton1.Attributes["onclick"] = "JavaScript:Show('" + divCnpj.ClientID + "')";
            this.RadioButton2.Attributes["onclick"] = "JavaScript:Hidden('" + divCnpj.ClientID + "')";
        }

        #region CARREGAR COMPONENTES.

        private void carregarCombo()
        {
            SPWeb site;
            SPList myList;

            site = SPContext.Current.Web;
            myList = site.Lists["uf"];

            ddlUf.Items.Add(new ListItem("Selecione o Estado", "-1"));

            foreach (SPListItem myItem in myList.Items)
            {
                ddlUf.Items.Add(new ListItem(myItem["Estado"].ToString(), myItem.Title.ToString()));
            }

        }

        private void carregarGrupo()
        {
            SPWeb site;
            SPList myList;

            site = SPContext.Current.Web;
            myList = site.Lists["Grupo"];

            ddlMember.Items.Add(new ListItem("Não pertenço a grupo ou conselho."));

            foreach (SPListItem myItem in myList.Items)
            {
                ddlMember.Items.Add(new ListItem(myItem["Título"].ToString(), myItem.Title.ToString()));
            }

        }

        #endregion

        # region Evento OnClick
        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    if (salvarItemFormularioCadastro())
                        CadastroComSucesso();
                });


            }
            catch (Exception ex)
            {
                ExibirMensagemErro(ex.Message);

            }
        }

        #endregion

        /// <summary>
        /// Exibe a mensagem de erro utilizando uma função javascript.
        /// </summary>
        /// <param name="pMensagemErro"></param>
        public void ExibirMensagemErro(string pMensagemErro)
        {
            if (string.IsNullOrEmpty(pMensagemErro))
            {
                //Response.Write("<script>alert('" + pMensagemErro + "')</script>");
                lblAlertValidacao.Text = pMensagemErro; // "O CPF nao é correto, por favor digite de novo.";
                lblAlertValidacao.Style.Add("display", "block");
            }
        }


        /// <summary>
        /// Exibe a mensagem de Sucesso de cadastro de Visitante.
        /// </summary>
        public void CadastroComSucesso()
        {
            Response.Write(@"<script>alert('Seu pedido foi realizado com sucesso!'); location.href='../home.aspx';</script>");
            //Response.Write(@"<script>alert('Seu pedido foi realizado com sucesso!\n Você receberá um e-mail com a confirmação da inscrição.'); location.href='../home.aspx';</script>");
        }



        #region SALVAR DADOS

        private bool salvarItemFormularioCadastro()
        {
            SPList myList;
            SPListItem myItem;
            bool retorno = true;

            myList = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaInscritos]; //myWeb.Lists["Inscritos"];
            myItem = myList.Items.Add();

            if (isExisteCpf(txtCpf.Text))
            {
                RetornoComError("ExisteCPF");
                retorno = false;
            }

            #region CPF Válido
            /* else if (!isValidoCpf(txtCpf.Text))
            {
                RetornoComError("ErrorCPF");
                retorno = false;
            }*/

            #endregion


            else
            {


                //Salvando o conteudo inserido no formulario na lista.

                myItem["nome"] = txtNome.Text;
                myItem["CPF"] = txtCpf.Text.Trim();
                myItem["endereco"] = txtEndereco.Text;
                myItem["cidade"] = txtCidade.Text;
                myItem["UF"] = ddlUf.SelectedValue.ToString();
                myItem["telefone"] = txtTelefone.Text;
                myItem["email"] = txtEmail.Text;
                myItem["GrupoOuConselho"] = ddlMember.SelectedValue.ToString();
                myItem["instituicao"] = txtInstitucao.Text;
                myItem["ocupacao2"] = txtCargo.Text;
                myItem["cnpj"] = txtCNPJ.Text;







                //myItem["Email_x0020_Enviado"] = true;


                myItem.Update();
                _retrievedItemId = myItem.ID;

                enviaEmail(txtNome.Text);
                //envioMensagemCadastroVisitante(txtNome.Text, txtEmail.Text);
            }

            return retorno;
        }

        public void enviaEmail(string nome)
        {
            ServicePointManager.ServerCertificateValidationCallback =
                delegate(object enviar, X509Certificate certificate, X509Chain chain,
                SslPolicyErrors sslPolicyErrors) { return true; };

            SmtpClient cliente = new SmtpClient("smtp.gmail.com", 587 /* TLS */);
            cliente.EnableSsl = true;

            MailAddress remetente = new MailAddress("tit.brasil.chamados@gmail.com", "T-IT Brasil");
            MailAddress destinatario = new MailAddress("simbracs@mdic.gov.br", "simbracs");

            MailMessage mensagem = new MailMessage(remetente, destinatario);

            mensagem.Body = string.Format(@"Solicitação de reserva feita pelo Sr.(a) {0}.
Os dados podem ser visualizados na lista 'Inscritos', para acessa-la click no linck a seguir:
http://cdn.t-itbrasil.com.br/Lists/Inscritos/AllItems.aspx?InitialTabId=Ribbon%2EListItem&VisibilityContext=WSSTabPersistence", nome);
            mensagem.Subject = "Solicitação de Reserva.";

            NetworkCredential credenciais = new NetworkCredential(
                "tit.brasil.chamados@gmail.com", /* login */
                "t1tP@ssw0rd" /* senha */
                );

            cliente.Credentials = credenciais;

            try
            {
                cliente.Send(mensagem);
            }
            catch (Exception a)
            {
                Response.Write("Exceção:" + a.ToString());
            }
        }

        /*
        private void envioMensagemCadastroVisitante(String nomeDestino, String destinoEmail)
        {
            //Crear Email para usuario cadastrado.
            SPList myListEmail = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaDadosEventos]; // myWeb.Lists["DadosEventos"];
            String assuntoEmail = "", origemEmail = "", mensagemEmail = "";
            var myItemEmail = myListEmail.Items.Cast<SPListItem>().ToList();

            assuntoEmail = myItemEmail[0]["assunto"].ToString();
            origemEmail = myItemEmail[0]["origem"].ToString();
            mensagemEmail = myItemEmail[0]["mensagem"].ToString();

           // string dataSeleccionadaText = "";
          //  var datasSelecionadas = cblDatasEvento.Items.Cast<ListItem>().Where(i => i.Selected == true).Select(i => i.Value).ToList();



           // foreach (var item in datasSelecionadas)
            //{
               // dataSeleccionadaText += item + "<br />";
            //}

            mensagemEmail = mensagemEmail.Replace("dt_Nome", "<b>" + txtNome.Text + "</b>");

            //            String msgEmail = String.Format(@"
            //                        <b>Prezado {0}</b>
            //                        <br />
            //                        <br />
            //                        {1}
            //                        <br />
            //                ", nomeDestino
            //                 , mensagemEmail);

            //            enviarEmail(origemEmail, destinoEmail, assuntoEmail, msgEmail);

            try
            {
                System.Net.Mail.MailMessage correo = new System.Net.Mail.MailMessage();
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

                correo.From = new System.Net.Mail.MailAddress(origemEmail);
                correo.To.Add(new MailAddress(txtEmail.Text, txtNome.Text));
                correo.Subject = "Inscrição";
                correo.Body = string.Format("<br /><br />{0}<br />{1}", DateTime.Now.ToShortDateString().ToString(), mensagemEmail);
                correo.IsBodyHtml = true;
                correo.Priority = System.Net.Mail.MailPriority.Normal; // Prioridad

                smtp.Host = Data.HotSite.Properties.SharepointStrings.SmtpHostIp; // "192.168.0.199";
                //smtp.Credentials = new System.Net.NetworkCredential("usuario", "password");
                smtp.EnableSsl = false;
                smtp.Send(correo);
            }
            catch (Exception e)
            {
#if DEBUG
                //Response.Write(string.Format("<script>alert(\"{0} :( \");</script>",e.Message));
                lblAlertValidacao.Text = string.Format("{0}", e.Message);
                lblAlertValidacao.Attributes.Add("display", "");
//#endif

                var myList = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaInscritos];
                var item = myList.GetItemById(_retrievedItemId);
                item["Email_x0020_Enviado"] = false;
                item.Update();
                //Response.Write(string.Format("<script>alert(\"Problemas no envio de e-mail :( \");</script>"));
                lblAlertValidacao.Text = string.Format("{0}", e.Message);
                lblAlertValidacao.Attributes.Add("display", "");
            }

        }

        /*
         :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ALERT !!!!
         * 
         * VERIFICAR ENVIO DE E-MAIL
         */
        //TODO: Verificar envio de email

        /*
        private void enviarEmail(String emailFrom, String emailTo, String assunto, String bodyMessage)
        {
            //SPUtility.SendEmail(myWeb, true, false, emailTo, assunto, bodyMessage);
            //SmtpClient smtp = new SmtpClient("correio.abdi.com.br"); //("srvabdi010.abdi.com.br");
            //MailMessage message = new MailMessage(emailFrom, emailTo); //MailMessage message = new MailMessage("dbrito-modulo@abdi.com.br", emailTo);
            ////message.From = new MailAddress("dbrito-modulo@abdi.com.br");
            ////message.To.Add(emailTo);
            //message.Subject = assunto;                                  //essage.Subject = "Cadastro Visitante!";
            //message.IsBodyHtml = true;
            //message.Body = bodyMessage;
            //smtp.Send(message);


            System.Net.Mail.MailMessage correo = new System.Net.Mail.MailMessage();
            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

            try
            {
                correo.From = new System.Net.Mail.MailAddress(emailFrom);
                correo.To.Add(new MailAddress(emailTo));
                correo.Subject = assunto;
                correo.Body = string.Format("\n\nFecha y hora GMT: {0}\n{1}", DateTime.Now.ToUniversalTime().ToString("dd/MM/yyyy HH:mm:ss"), bodyMessage);
                correo.IsBodyHtml = true;
                correo.Priority = System.Net.Mail.MailPriority.Normal; // Prioridad
                smtp.Host = Data.HotSite.Properties.SharepointStrings.SmtpHostIp; //"192.168.0.199";
                //smtp.Credentials = new System.Net.NetworkCredential("usuario", "password");
                smtp.EnableSsl = false;
            }
            catch
            {
                throw new Exception("Erro ao enviar E-Mail! Não foi possível criar a mensagem!\nPor favor comunicar ao administrador do site.");
            }

            try
            {
                smtp.Send(correo);
            }
            catch
            {
                throw new Exception("Erro ao enviar E-Mail! Não foi possível criar a mensagem!\nPor favor comunicar ao administrador do site.");
            }


        } */

        private void RetornoComError(string tError)
        {
            if (tError.Equals("ExisteCPF"))
            {
                lblErrorCPF.Text = "CPF já cadastrado no sistema!";
                lblErrorCPF.Style.Add("display", "block");
            }
            /*else if (tError.Equals("ErrorCPF"))
            {
                lblErrorCPF.Text = "Por favor, digite um CPF válido!.";
               lblErrorCPF.Style.Add("display", "block");
            }
            lblErrorCPF.Style.Add("display", "none");*/

            txtNome.Text = txtNome.Text.Equals("") ? "" : txtNome.Text;
            //ddlNacionalidade.SelectedValue = ddlNacionalidade.SelectedValue;
            txtCpf.Text = txtCpf.Text.Equals("") ? "" : txtCpf.Text;
            txtEndereco.Text = txtEndereco.Text.Equals("") ? "" : txtEndereco.Text;
            txtCidade.Text = txtCidade.Text.Equals("") ? "" : txtCidade.Text;
            ddlUf.SelectedValue = ddlUf.SelectedValue;
            txtTelefone.Text = txtTelefone.Text.Equals("") ? "" : txtTelefone.Text;
            txtEmail.Text = txtEmail.Text.Equals("") ? "" : txtEmail.Text;
            txtInstitucao.Text = txtInstitucao.Text.Equals("") ? "" : txtInstitucao.Text;
            txtCargo.Text = txtCargo.Text.Equals("") ? "" : txtCargo.Text;
            //rblTipoInstitução.SelectedValue.ToString();
            //rblParticipa1.SelectedValue = rblParticipa1.SelectedValue;
            //rblParticipa2.SelectedValue = rblParticipa2.SelectedValue;
            //rblParticipa3.SelectedValue = rblParticipa2.SelectedValue;
        }

        /// <summary>
        /// Verifica a existencia de CPF dentro da lista.
        /// </summary>
        /// <param name="valorCPF">valor CPF prenchido no TextBox</param>
        /// <returns></returns>
        /// 



        //Método que verifica se existe o CPF cadastrado na Lista
        private bool isExisteCpf(string valorCPF)
        {
            Boolean existe = false;
            SPListItemCollection listItems = myWeb.Lists[Data.HotSite.Properties.SharepointStrings.ListaInscritos].Items; // myWeb.Lists["Inscritos"].Items;

            foreach (SPListItem oItem in listItems)
            {
                String cpfLista = oItem["CPF"] == null ? "" : oItem["CPF"].ToString();
                if (cpfLista.Equals(valorCPF))
                {
                    existe = true;
                    break;
                }
            }

            return existe;
        }

        /* Método que valida o CPF
         * 
        private Boolean isValidoCpf(String vrCPF)
        {
            string valor = vrCPF.Replace(".", "");
            valor = valor.Replace("-", "");

            if (valor.Length != 11)
                return false;

            bool igual = true;
            for (int i = 1; i < 11 && igual; i++)
                if (valor[i] != valor[0])
                    igual = false;

            if (igual || valor == "12345678909")
                return false;

            int[] numeros = new int[11];

            for (int i = 0; i < 11; i++)
                numeros[i] = int.Parse(
                  valor[i].ToString());

            int soma = 0;
            for (int i = 0; i < 9; i++)
                soma += (10 - i) * numeros[i];

            int resultado = soma % 11;

            if (resultado == 1 || resultado == 0)
            {
                if (numeros[9] != 0)
                    return false;
            }

            else if (numeros[9] != 11 - resultado)
                return false;

            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += (11 - i) * numeros[i];

            resultado = soma % 11;

            if (resultado == 1 || resultado == 0)
            {
                if (numeros[10] != 0)
                    return false;
            }
            else
                if (numeros[10] != 11 - resultado)
                    return false;

            return true;
        }
        */


        #endregion
    }
}
